{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import brnn_model\n",
    "import sys  \n",
    "import import_folders\n",
    "%matplotlib inline\n",
    "import pickle_lib as pkl\n",
    "import utilities_lib as ul\n",
    "from graph_lib import gl\n",
    "import numpy as np\n",
    "## Load the data once !!\n",
    "import mpmath as mpm\n",
    "# Import specific model libraries\n",
    "from sklearn.gaussian_process import GaussianProcessRegressor\n",
    "from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C, WhiteKernel, ExpSineSquared\n",
    "from sklearn import preprocessing\n",
    "from scipy import spatial\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib import cm as cm\n",
    "\n",
    "\n",
    "plt.close(\"all\") # Close all previous Windows"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "### Generation of the easy signal\n",
    "\n",
    "def mean_function(tgrid, f1 = 1, f2 = 5, a1 = 0.4, a2 = 0.2, \n",
    "                      phi2 = 2*np.pi/7, m = 0.1 ):\n",
    "    # This function outputs the function that we want to estimate.\n",
    "    \"\"\"\n",
    "    m = 0.1   # Slope of the linear trend\n",
    "    f1 = 1      # Frquency of first sinusoid\n",
    "    f2 = 5      # Frequency of second sinusoid\n",
    "    a1 = 0.4;   # Amplitud of the first sinuoid\n",
    "    a2 = 0.2    # Amplitud of the second sinusoid\n",
    "    phi2 = 2*np.pi/7    # Phase shifting of the second sinuoid\n",
    "    \n",
    "    \"\"\"\n",
    "    linear_trend = m*tgrid\n",
    "    sin1 = a1* np.cos(2*np.pi*f1*tgrid)\n",
    "    sin2 = a2*np.cos(2*np.pi*f2*tgrid + phi2)\n",
    "    \n",
    "    X = linear_trend + sin1 + sin2\n",
    "    X = X.reshape(X.size,1)\n",
    "\n",
    "    return X\n",
    "\n",
    "################  Covariance Matrix \"K\" #################################\n",
    " #We compute the distances among each pair of points in X_grid\n",
    "\n",
    "def get_Kernel (tgrid, kernel_type = \"1\", l = 0.001, sigma_noise = 1):\n",
    "    if (kernel_type == \"1\"):\n",
    "        # Hyperparameters\n",
    "        #l = 0.0001  # \n",
    "        # k = 1;   #\n",
    "        distances = spatial.distance.cdist(tgrid,tgrid,'euclidean')\n",
    "        K = np.exp(-np.power(distances,2)/(2*l))\n",
    "        K = K/ K[0,0] \n",
    "        K = K* sigma_noise\n",
    "        \n",
    "    elif (kernel_type == \"2\"):\n",
    "        \"\"\"\n",
    "        This is the most noisy possible kernel since each sample has its own noise\n",
    "        that is independent from the rest. Knowing the previous noise value\n",
    "        gives no information about this one.\n",
    "        \n",
    "        The Marginal error is the same, but if the samples are uncorrelated then the signal\n",
    "        if just completely noisy, no smoothness.\n",
    "        \n",
    "        \"\"\"\n",
    "        # Hyperparameters\n",
    "        # sigma_noise = 1\n",
    "        K = np.eye(N) * sigma_noise\n",
    "    \n",
    "    return K\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/montoya/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py:545: UserWarning: No labelled objects found. Use label='...' kwarg on individual plots.\n",
      "  warnings.warn(\"No labelled objects found. \"\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe6501646d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Determinant by mpm:', mpf('7.3128891337494991e-178')]\n",
      "['Determinant by numpy:', 7.3129219013338985e-178]\n"
     ]
    }
   ],
   "source": [
    "\n",
    "#######################################################################\n",
    "############### Generate the signal ###################################\n",
    "#######################################################################\n",
    "\n",
    "t0 = 0          # Initial time         \n",
    "tf = 2        # Final time\n",
    "delta_t = 0.02   # Period of sampling\n",
    "\n",
    "# Create the t- values\n",
    "tgrid = np.linspace(t0,tf, int(float(tf-t0)/delta_t))\n",
    "tgrid = tgrid.reshape(tgrid.size,1)\n",
    "N = tgrid.size\n",
    "\n",
    "# Create the signal \n",
    "X = mean_function(tgrid, f1 = 1, f2 = 5, a1 = 0.4, a2 = 0.1, \n",
    "                      phi2 = 2*np.pi/7, m = 0.1 )\n",
    "\n",
    "plot_mean_signal = 1\n",
    "if (plot_mean_signal):\n",
    "    ## Plot the orginal function\n",
    "    gl.scatter(tgrid,X, lw = 1, alpha = 0.9, color = \"k\", nf = 1, \n",
    "               labels = [\"The true signal to estimate\", \"t\", \"X(t)\" ])\n",
    "    gl.plot(tgrid,X, lw = 2, color = \"k\", ls = \"--\",  legend = [\"True signal\"])\n",
    "\n",
    "\n",
    "###########################################################################\n",
    "############### Generate the structural noise #############################\n",
    "###########################################################################\n",
    "\n",
    "\"\"\" Now we generate the stocastic process that we add to X(t), \n",
    "    generating noisy signal Y(t) = X(t) + e(t)\n",
    "    \n",
    "    Where we will assume e(t) is Gaussian with mean 0 e(t) \\sim N(0,\\sigma_t)\n",
    "    So we have a Gaussian process, since each set of samples forms a jointly\n",
    "    gaussian distribution. The relation between the noises will be given by the\n",
    "    covariance matrix C. This will tell how big the noises are and how they relate\n",
    "    to each other.\n",
    "    \n",
    "    We will use a basic kernel for now\n",
    "\n",
    "\"\"\"\n",
    "\n",
    "K = get_Kernel(tgrid, kernel_type = \"1\", l = 0.01, sigma_noise = 0.5)\n",
    "\n",
    "############# Compute properties of the Kernel ########################\n",
    "N_det = 30 # Number of samples to compute the determinant from \n",
    "\n",
    "det_K2 = mpm.det(K[:N_det,:N_det]+ 1e-10*np.eye(N_det))\n",
    "det_K = np.linalg.det(K[:N_det,:N_det]+ 1e-10*np.eye(N_det))   # Determinant ! \"Noisiness of the kernel\"\n",
    "                           # The bigger the determinant, the more random ? \n",
    "print ([\"Determinant by mpm:\", det_K2])\n",
    "print ([\"Determinant by numpy:\", det_K])\n",
    "# Choleski factorization ! To sample from the Multivatiate Gaussian.\n",
    "# To ensure that it is positive definite we add a small noise to the diagonal\n",
    "L = np.linalg.cholesky(K+1e-10*np.eye(N))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe64fbbf748>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEJCAYAAACKWmBmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztvXt8VNW58P9duZMQLuES7gYEEUQIEFBUNAgqXirS6qlW\nLdr2w7HVtrZvz3k9p8fq6WtP/dWe3rSt5bX28mpLPd4vtF6Q1HpBEAQFQblFSLgHCCQQQpL1+2Nl\nsvdMJpPJzJ59mXm+n08+WXtm7b2f2bNmP/u5rGcprTWCIAiC0BVZXgsgCIIg+BtRFIIgCEJMRFEI\ngiAIMRFFIQiCIMREFIUgCIIQE1EUgiAIQkxEUQiCIAgxEUUhCIIgxEQUhSAIghCTHK8FiMXAgQN1\nWVlZQvs2NjZSVFTkrEAO4mf5RLbE8LNs4G/5RLbESFa2NWvWHNRaD+q2o9bat3/Tp0/XibJixYqE\n93UDP8snsiWGn2XT2t/yiWyJkaxswHs6jnuxuJ4EQRCEmIiiEARBEGIiikIQBEGIiSPBbKXUo8BV\nwH6t9aQu+lQCPwNygYNa64sSOdepU6eoqamhqakpZr++ffuyadOmRE7hCn6WT2RLDD/LBj2Tr6Cg\ngBEjRpCbm5tiqYQg4FTW0++Bh4A/RntTKdUP+BUwX2u9Uyk1ONET1dTUUFxcTFlZGUqpLvsdO3aM\n4uLiRE+Tcvwsn8iWGH6WDeKXT2tNXV0dNTU1jB492gXJBL/jiOtJa/0GcChGly8AT2utd7b335/o\nuZqamhgwYEBMJSEIQuIopRgwYEC3VruQObgVozgD6K+UqlJKrVFKfTGZg4mSEITUIr8xwY5bE+5y\ngOnAXKAX8I5SaqXW+pPIjkqpxcBigNLSUqqqqsLe79u3L8eOHev2hK2trXH18wo/yyeyJYafZYOe\ny9fU1NTp95cqGhoaXDtXTwnJ1tqq2LmzF3V1+Zx2WiODBjV7LZp71y2eyRbx/AFlwIYu3rsL+E/b\n9m+B67o7ZrQJdx999FFcE0mOHj0aV79EyMrK0lOmTNFnnXWWvuqqq/Thw4d7fIyQfKeddpo+cOCA\n1lrrWbNmJSTPD37wg7DtRI8TKVtPaGpq0nPnztVTpkzRS5cuDXvvd7/7na6tre3Ytn/mRGT75JNP\n9JVXXqnHjBmjp02bpisrK/Xf//73hI7XE5577jn9wx/+MKZsfqan8sX7W3MCP09qe+65f+hly7S+\n/36t77nH/N13n9b19V5Lln4T7p4DLlBK5SilCoFzAP+mh3RDr169WLduHRs2bKCkpIRf/vKXjhz3\n7bffTmi///qv/3LkOMnw/vvvA7Bu3To+//nPh733+9//nt27dztynqamJq688koWL17Mtm3bWLNm\nDQ8++CDbt2935PixuPrqq7nrrrtSfp4QLS0trp1LiM7Jk7Bs2VDefRdOnLBeP3UKXnvNO7ncxhFF\noZT6M/AOMF4pVaOU+rJS6jal1G0AWutNwN+AD4BVwCNa6w1OnNtrZs2aRW1tbcf2Aw88wIwZM5g8\neTL33HNPx+vXXHMN06dP56yzzmLJkiVRj9W7d28Avve971FeXk55eTnDhw/n1ltv7fIYd911FydO\nnKC8vJwbb7wx7Dhaa/7lX/6FSZMmcfbZZ/OXv/wFgKqqKiorK7n22ms588wzufHGG0OWHnfddVeH\n/N/5znc6yXjo0CGuueYaJk+ezLnnnssHH3zA/v37uemmm1i9ejXl5eVs27ato/+TTz7Je++9x403\n3kh5eTkn2n9tDz74INOmTePss89m8+bNgKlb86UvfYmZM2cydepUnnvuuU7nf+KJJ5g1axZXX311\nx2uTJk3illtuAWDVqlXMmjWLqVOnct555/Hxxx8DRlndcccdHftcddVV7e6EVm655ZaOa/TTn/4U\ngF/84hdMnDiRyZMnc/3113c6xgsvvMA555zD1KlTmTdvHvv27QPg3nvv5Utf+hKVlZWMGTOGX/zi\nF11+19/61rc466yzmDt3LgcOHACgsrKSO++8k4qKCn7+859TXV3NxRdfzOTJk5k7dy47d+4EYN++\nfSxcuJApU6YwZcqUjoeDxx57jJkzZ1JeXs4///M/09ra2vEZzznnnG4/oxDOhx9CU1N2x3afPtZ7\nH3wAtp9+WuNIjEJrfUMcfR4AHnDifCHuvbfr906ezCM/PzXHDtHa2sry5cv58pe/DMArr7zCli1b\nWLVqFVprrr76at544w0uvPBCHn30UUpKSjhx4gQzZszg0ksv7TJV8fvf/z7f//73OXLkCLNnz+64\nOUUe43Of+xz3338/Dz30EOvWret0nKeffpp169axfv16Dh48yIwZM7jwwgsBYwFs3LiRYcOGcf75\n5/PWW28xYcIEnnnmGVavXk2fPn04cuRIp2Pec889TJ06lWeffZbXX3+dL37xi6xbt45HHnmEH//4\nx7z44oth/a+99loeeughfvzjH1NRUdHx+sCBA1m7di2/+tWv+PGPf8wjjzzCD37wAy6++GIeffRR\njhw5wsyZM5k3b15Y0bNNmzYxbdq0Lr+TM888k3/84x/k5OTw2muv8e///u889dRTXfZft24dtbW1\nbNhgnltCn/n+++9nx44d5OfnR70OF1xwAStXrkQpxSOPPMKPfvQj7m0fNJs3b2bFihUcO3aM8ePH\n89WvfrXTfITGxkYqKir46U9/yve//33+8z//k4ceegiA5uZm3nvvPQA+85nPsGjRIhYtWsSjjz7K\nN77xDZ599lm+8Y1vcNFFF/HMM8/Q2tpKQ0MDmzZt4i9/+QtvvfUWubm5fO1rX+Pxxx/nrLPOora2\nlnfffZfi4uK4P2OmozW0fw0AzJkDF14ITzwBoekof/sbfOlLkO6xf5mZnQChJ/ghQ4awb98+Lrnk\nEsAoildeeYWpU6cybdo0Nm/ezJYtWwDz9DZlyhTOPfdcdu3aFfbUHQ2tNTfddBPf/va3mT59etRj\nhI7dFW+++SY33HAD2dnZlJaWctFFF7F69WoAZs6cyYgRI8jKyqK8vJzq6mr69u1LQUEBt99+O08/\n/TSFhYVRj3nzzTcDcPHFF1NXV8fRo0d7dgGBz372swBMnz6d6upqwFy/+++/n/LyciorK2lqaup4\ngu6KhQsXMmnSpI7j1dfXc9111zFp0iS+9a1vsXHjxpj7jxkzhu3bt/P1r3+dv/3tb/Rpf2ScPHky\nN954I4899hg5OZ2fp2pqarjssss4++yzeeCBB8LOc+WVV5Kfn8/AgQMZPHhwh7VhJysrq8NFd9NN\nN/Hmm292vGd33b3zzjt84QtfAODmm2/u6Pf666/z1a9+FYDs7Gz69u3L8uXLWbNmDTNmzKC8vJzl\ny5ezffv2js/4ne98p0efMdPZvRv27jXtnByYOdMohEsugex2I2PXLuhmiKUFoigSIBSj+PTTT9Fa\nd8QotNb827/9G+vWrWPdunVs3bqVL3/5y1RVVfHaa6/xzjvvsH79eqZOncrJkydjnuPee+9lxIgR\nHW6naMdIJs8932ZuZWdn09LSQk5ODqtWrWLBggW8+OKLzJ8/P+Hjx3v+0LnBXL+nnnqq4/rt3LmT\nCRMmhO03YcIE1q5d27H9zDPP8Pvf/55Dh8w0nrvvvps5c+awYcMGXnjhhY5rlJOTQ1tbW8d+odf7\n9+/P+vXrqays5OGHH+YrX/kKAC+99BK33347a9euZcaMGZ3iBV//+te54447+PDDD/nNb34T9l1E\nu7bdYU9HTbRstNaaRYsWdVy/jz/+mHvvvbfjM86ePbtHnzHTsVsTkyZBr16mXVIC55xjvffqq5Du\nly7QjxGx3EPHjjVTXJyE7ykOCgsL+cUvfsE111zD1772NS677DLuvvtubrzxRnr37k1tbS25ubnU\n19fTv39/CgsL2bx5MytXrox53BdeeIHXXnuNFStWdLwW6xi5ubmcOnWqk3tj9uzZ/OY3v2HRokUc\nOnSIN954gwceeKAjJhBJQ0MDx48f57LLLuOSSy5hzJgxnfrMnj2bxx9/nLvvvpuqqioGDhzY8YTa\nFcXFxXGlZV522WU8+OCDPPjggyileP/995k6dWpYn+uuu46f/vSnPP/88x1xiuPHj3e8X19fz/Dh\nwwETUwhRVlbGr371K9ra2qitrWXVqlUAHDx4kLy8PD73uc8xfvx4brrpJtra2ti1axdz5szhggsu\nYOnSpTQ0NITJYT/PH/7wh24/WyRtbW08+eSTXH/99fzpT3/iggsuiNrvvPPOY+nSpdx88808/vjj\nzJ49G4C5c+fy61//mjvvvLPD9TR37lwWLFjAt771LQYPHsyhQ4c4duwYRUVF5OXlsWDBAsrLy2N+\nxn79+vX4s6QjTU2wwRZFtXlNAeOCWr8eGhuhvh527IBx49yV0U0CrSj8wNSpU5k8eTJ//vOfufnm\nm9m0aROzZs0CTMDyscceY/78+Tz88MNMmDCB8ePHc+6558Y85k9+8hNqa2uZOXMmYLJtvvvd73Z5\njMWLFzN58mSmTZvG448/3vH6woULeeedd5gyZQpKKX70ox8xZMiQLhXFsWPHWLBgAcePH0cpxU9+\n8pNOfULB2smTJ1NYWBjXTfKWW27htttuo1evXrzzzjtd9rv77ru58847mTx5Mm1tbYwePbpTzKNX\nr168+OKLfPvb3+bOO++ktLSU4uJi/uM//gOAf/3Xf2XRokXcd999XHnllR37nX/++YwePZqJEycy\nYcKEjjhHbW0tt956a4e18cMf/pDW1lZuuukm6uvr0VrzjW98o9MN9N577+W6666jf//+XHzxxezY\nsaPb62CnqKiIVatWcd999zF48OCORINIHnzwQW699VYeeOABBg0axO9+9zsAfv7zn7N48WJ++9vf\n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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe65038d7b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_stochastic_process = 1\n",
    "if (plot_stochastic_process):\n",
    "    \n",
    "    ## Plot the covariance matrix ! \n",
    "    # Show the Nshow first samples\n",
    "    \n",
    "    Nshow = 20\n",
    "    fig = plt.figure()\n",
    "    ax1 = fig.add_subplot(111)\n",
    "    cmap = cm.get_cmap('jet', 30)\n",
    "    cax = ax1.imshow(K[0:Nshow,0:Nshow], interpolation=\"nearest\", cmap=cmap)\n",
    "    \n",
    "#    ax1.grid(True)\n",
    "    plt.title('Covariance matrix of Noise')\n",
    "#    labels=[str(x) for x in range(Nshow )]\n",
    "#    ax1.set_xticklabels(labels,fontsize=20)\n",
    "#    ax1.set_yticklabels(labels,fontsize=20)\n",
    "    # Add colorbar, make sure to specify tick locations to match desired ticklabels\n",
    "    fig.colorbar(cax)\n",
    "    plt.show()\n",
    "    \n",
    "    \n",
    "    ## Plot realizations of the Gaussian process\n",
    "    Nrealizations = 10\n",
    "    \n",
    "    flag = 1;\n",
    "    legend = [\"Realizations of the Gaussian process\"]\n",
    "    labels = [\"Gaussian Process\",\"t\", \"e(t)\"]\n",
    "    \n",
    "    for i in range(Nrealizations):\n",
    "        f_prime = np.random.randn(N,1)\n",
    "        error = L.dot(f_prime) \n",
    "        gl.plot(tgrid,error, lw = 3, color = \"b\", ls = \"-\", alpha = 0.5, \n",
    "                nf = flag, legend = legend)\n",
    "#        gl.scatter(tgrid,f_prime, lw = 1, alpha = 0.3, color = \"b\")\n",
    "        \n",
    "        if (flag == 1):\n",
    "            flag = 0\n",
    "            legend = []\n",
    "    \n",
    "    #Variance of each prediction\n",
    "    v = np.diagonal(K)\n",
    "    gl.fill_between(tgrid, -2*np.sqrt(v), 2*np.sqrt(v), lw = 3, alpha = 0.5, color = \"yellow\", legend = [\"95% confidence interval\"]);\n",
    "    gl.plot(tgrid,  2*np.sqrt(v), lw= 1, alpha =  0.5, color = \"yellow\", legend = [\"95% confidence interval\"]);\n",
    "    gl.plot(tgrid,  2*np.sqrt(v), lw= 1, alpha =  0.5, color = \"yellow\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe64fa1c9b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "###########################################################################\n",
    "############### Getting the combined noisy signal #########################\n",
    "###########################################################################\n",
    "plot_realizations_signal = 1\n",
    "if (plot_realizations_signal):\n",
    "    flag = 1;\n",
    "    legend = [\"Realizations of X(t) = mu(t) + e(t)\"]\n",
    "    for i in range(10):\n",
    "        f_prime = np.random.randn(N,1)\n",
    "        error = L.dot(f_prime)\n",
    "        f =  X + error\n",
    "                \n",
    "    #    gl.scatter(tgrid,f, lw = 1, alpha = 0.3, color = \"b\")\n",
    "        gl.plot(tgrid,f, lw = 3, color = \"b\", ls = \"-\", alpha = 0.5, nf = flag, legend = legend)\n",
    "        if (flag == 1):\n",
    "            flag = 0\n",
    "            legend = []\n",
    "    \n",
    "    \n",
    "    #Variance of each prediction\n",
    "    v = np.diagonal(K)\n",
    "    gl.fill_between(tgrid, X-2*np.sqrt(v), X+ 2*np.sqrt(v), lw = 3, alpha = 0.5, color = \"yellow\", legend = [\"95% confidence interval\"]);\n",
    "    gl.plot(tgrid, X+ 2*np.sqrt(v), lw= 1, alpha =  0.5, color = \"yellow\", legend = [\"95% confidence interval\"]);\n",
    "    gl.plot(tgrid, X- 2*np.sqrt(v), lw= 1, alpha =  0.5, color = \"yellow\");\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/montoya/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py:545: UserWarning: No labelled objects found. Use label='...' kwarg on individual plots.\n",
      "  warnings.warn(\"No labelled objects found. \"\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe64f9ba470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAABgCAYAAAA6sYQbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAECVJREFUeJzt3X2wXVV5x/HvrxBtSZiCBGMI4KUWiyBQIBMKglxHWi9h\nKHVqHV5U0tpaLXZ0RjsEae1MGYc4VgepgqUUKWpBW0CY8CZoIgUG5AYjhJfUmAYkRCLvSaDFwNM/\n1r7h5OS87H3Ofjkhv8/Mneyz9157PfuclbvuPs/aaysiMDMzG9avNR2AmZm9NrhDMTOzUrhDMTOz\nUrhDMTOzUrhDMTOzUrhDMTOzUrhDMTOzUrhDMTOzUjTaoUi6VNJ6SSu6bJekCyStknSfpMNbtk1I\nWpltW1hf1GZm1knTVyiXARM9tp8A7J/9fAS4CEDSTsBXs+0HAqdKOrDSSM3MrKedm6w8Im6TNNZj\nl5OByyPND3OXpN0kzQbGgFURsRpA0pXZvg/2qm/mzJkxNtarut42bdrE9OnTBy5fFcdVzCjGNYox\ngeMqahTjKiOmZcuWPRkRe/bbr9EOJYc5wM9bXj+Wreu0/sh+BxsbG2NycnLgYJYuXcr4+PhAZccW\nXg/AmkUndl2uOq6y681Tx4sd6ivrvSh6zKnlyyams+CmTUPFMGjd3eoYpm3ljWcQeeKqsm13qyvv\nZzhsPIN8tv3afJl15TnPYdsWgKRH8uw36h3K0CR9hPR1GbNmzWLp0qUDH2vjxo1DlQe2Kt9tuaii\ncZVV7yB1FF2uoq6NGzcCKiWGss6zjLaVt64iisRVRdvupuhnOGw8ZX3Oeeouu66y2lYejXYokiZI\nuZC9JS2MiEVtu8wEvinpWVKsBwGbgLXA6ZKOBF7O9vtqpzoi4mLgYoC5c+fGMD31UD39TemvhvHx\n8e7LVcdVcr2F6ii6XGFdM2bMIDWjIWIo+TyH/iuyovaVK64K23a3unJ/hsPGU9bnnKfuiuoq4wol\nr8aS8i2J9QXAKjon1s8FHgIOIyXwN0TEQ8A9pA7mDGAe8BRwXS2Bm5lZR01eocwDdgG+Q7rCeAE4\nV9ItABHxNeAGYD6pw9kDuCDbtlnS01lZAZdGxAO1n4GZmW3RZIcyB7g+Iv4cQNIHgSOzjgSAbHTX\nmZJ2ISXev9RS/gVgI+krr1/WFrWZmXW0vSTlTwLuiIinW9YdExFrJb0RuEXSwxFxW3tBJ+Xzx1Am\nJ+WLx+SkfH5Oyudf3lGS8muBfVpe752t6+QU4IrWFRGxNvt3vaRrSF+hbdOhOCmfI4YyOSk/0Hk6\nKZ+Tk/KF66ozKd9kh3IPcIik1cArwHTg+NYdJI0D12bb3iLptyPiHyRNB/4AWEQ6h52Bv6wxdjMz\na9NkhxLZv2Lq2hVC0kdhS1Ie4H+AhyPilJays4ErgdXA/5GS+49WHrGZmXXV9Civ+yLiPQCSzgZO\njojz2vZ7rK0zAdgTWNpelj5Tr5iZWXWaHuWVZ/qUoyXdR8qvfDobHpx76hUn5fPHUCYn5YvH5KR8\nfk7K51/eUZLyedwL7BsRGyXNB75Lmnk4Nyflc8RQJiflBzpPJ+VzclK+cF07SlJ+LfC7klYCO5Fu\nXvxh2z4nAWdJErAB2EXSTApMvWJmZvVobOoVYBlwKPAX2b/HAe0P2noOOC4iDga+Teo4nsJTr5iZ\njZy+VyiS9ibdB3IssBfwIukX//XAjRHxyoB1HwHcB1xCukK5DXi7pDmwZZTXGPB5SZuBl4Dns7vn\nPfWKmdmI6dmhSPo6KQG+GPg8sB74deCtpCctnpPNErzNDYU5zAF+3GHqlS2jvCLiK8BXsu2fBg5o\nKe+pV8zMRki/K5QvRkSn572vAK6W9Dpg3/LD2pqkdwEfBo5pWe2pVzIe5VXsmB7llZ9HeQ12XI/y\n6mCqM5H0iYj4cuu2lnWrBqy7b1I+S8Z/E3g/8DPgzaR8CcDBkn6QlV2Dp14ZPIYyeZTXQOfpUV45\neZRX4brqHOWVNyl/Rod1C4asO09S/kPAH2XbFgAXAUjaFbgQOAGYCxwFPD9kPGZmNoR+OZRTgdOA\n/SS1jqLaFXi6c6nc8iTlF5KmaLkwK3OApNnA0aQRX9dk53A76XkpZmbWEKVBU102Sm8G9gPOI/1y\nn7KBNG3K5oErlt4HTHRIyn+8ZZ/FwKKIuD17/X3gLNLor55lO5k7d25MTk4OGvKrl45S333NzEZG\nj9/zeUhaFhFz++3XLyn/aEQ8QvpKqVtFil69UsOqSMqPlxOamVktRiIpDyyRdBVwbURsmc03G911\nDCm3soT0vPei8jwPpds+03KUBapJyo+dtRiANYtOZGzh9VuWga1et2/rp1vZfsuXTUxnwU2b+u5f\ndr2dzrnVMMnAvHUPIm9cZdfbq468n2ET7avJtt2trmETzVW1rzxx1dGutqlrRKZemQD+DLhC0n7A\ns8BvkJL53wPOj4gfF61U0huAc4HjJP0X8MekmydPa9lnH9KV0emS/ha4GXguItZJ+hjwbkkPAr8i\n5XROKhqHmZmVp1+HcjVwZkRcKGkaKRH+YkQ8O2S9C4FbSc+I/zdgJfCPEfHA1PNQSA/WWkC6/+QE\n4EzgA9m2V0hXRe8EXg/8q++UNzNrVr8O5evAzZIuA74QEetKqvdkYDy72jiE9GyTz8FWD9YCWEea\ncRhJ15KukKY8PJWUNzOz5vW7sfE/JN0I/B0wKekbpKuDqe1fGrDeWS2d0y+AWb12ljQGHAbc3bL6\nryV9CJgEPhURzwwYi5mZlSDP9PUvkW5JfT0pV5FrMkhJtwJv6rDpnNYXERGSuo4SkzQDuAr4ZERM\n3bx4ESkHE9m/XyTlejqVr2zqlV5TKmyPU4kMO41E+2tPVZNfnVOJlPk511l3e5sv47Mou32VMVVN\nFUZilJekCVKe4zrg8Ih4Ie+BI+L4Hsf9paQfkmYvfhx4sst+a0g3LD4PfIaU04GUiL+JdD/KL+hx\nU2MlU6/0mlJhe5xKZNhpJLrUMdRInB1sqppaphIp83Ous+4dZaqaKlR9/Db9pl45B/iTiFhYpDPJ\n4RnghYjYnzRr8DZ33WfzeM0EvhURc9puqjkX+H5W/jmm/rQzM7PG9OxQIuLYikZP7Q7MkPRTYDrw\nBgBJe0m6IdvnHdm2YyUtz37mZ9s+AJyRPWt+WvZjZmYNauoRwHtmVxdTVyLPAETE48D8bPn27Cuv\nX5GeefLPETHV2UREvK29vJmZNaeyDqWkpHzfZ57kSOo7KZ8zBifli8VQJifliy07KV/MSCTlhzFs\nUl7S7wDf1qsTMR4AfIo0K/FmSeuAJ0jnsKlHHE7K94vBSfliMZTJSfmBztNJ+ZxqTso39ZXXlqR8\ndp9Lp6nwHwOOjYgN2fNPniINH4Z0Z/2zEXGipIVkORgzM2tO3gdslS1PUn4WcLuknwD3A+si4vJs\n2+3AW7PyxwOLao3ezMy2McpJ+dWkJzki6VKyKVgyLwKvIw0ZfpR0g6OZmTVo1JPyU1Pl/yFwdstq\n3ynvpPzAx3RSfrjjOynfnZPyFemTlH9C0uxscsjZwPoehzoBuDcinmg59pZlSf8CLO4Rh5Py/WJw\nUr5YDGVyUn6g83RSPqcRu1O+Kg8DyyW9QppS5dpOO2VTv3wDODRLvk+tf5ukW7Icys2kJL2ZmTWo\nqQ7lPGA18L/APLKkemtSXtJOwIWkmxoPAk6VdGBW/j+Bg0m5lJdJ09ybmVmDGulQIuKuiDgK+BHp\nAV5PZ+sfj4ip6VXmAT+NiN0j4kngStJzVCB9VXdYRBwCvBv4/XrPwMzM2jV1hZLHHODnLa8fy9ZB\nweepmJlZ9RoZ5RURHXMmg/DUKx7lVZRHeQ13fI/y6m5HH+VFRDT2AywF5nbZdhRwc8vrs4Gzs+WV\nwOxseTawMk99RxxxRAxjyZIlQ5WviuMqZhTjGsWYIhxXUaMYVxkxAZOR43dsUzc25nEPsL+k/YC1\nwCnAadm264AzSMn8M+gySqzdsmXLnpT0yBAxzaTLw8Aa5riKGcW4RjEmcFxFjWJcZcT05jw7KXU+\n9ZL0XuCfgD2BZ4HlEfEeSXsBl0SWmM+ef3I+sBNwaUR8Llu/B/AdYF/gEeD9kSX2K457MrZ+0NdI\ncFzFjGJcoxgTOK6iRjGuOmNq5AolIq4BrumwfsvUK9nrG4AbOuz3FGl0l5mZjYhRHuVlZmbbEXco\nxVzcdABdOK5iRjGuUYwJHFdRoxhXbTE1kkMxM7PXHl+hmJlZKdyhZCRNSFopaVXrRJQt2yXpgmz7\nfZIOz1u24rhOz+K5X9Kdkg5t2bYmW79c0mSNMY1Lei6rd7mkz+YtW3Fcf9MS0wpJL0uaerhbVe/V\npZLWS1rRZXtT7apfXLW3q5xxNdW2+sXVRNvaR9ISSQ9KekDSJzrsU2/7ynOzymv9hzQs+WfAb5Ee\n3PUT4MC2feYDN5JuZ/494O68ZSuO62hg92z5hKm4stdrgJkNvFfjwOJBylYZV9v+JwE/qPK9yo77\nTuBwYEWX7bW3q5xx1dquCsRVe9vKE1dDbWs2cHi2vCvw303/3vIVSjIPWBURqyPiJbaeiHLKycDl\nkdwF7Kb0LJc8ZSuLKyLujIhnspd3AXuXVPfAMVVUtuxjnwpcUVLdXUXEbUCve6SaaFd942qgXeWK\nq4dG3682dbWtdRFxb7a8AXiIV+c7nFJr+3KHkvSaiLLfPnnKVhlXqw+T/hqZEsCtkpYpzWlWZ0xH\nZ5fYN0o6qGDZKuNC0i7ABHBVy+oq3qs8mmhXRdXRroqou23l1lTbkjQGHAbc3bap1vY1ylOvWAGS\n3kX6j39My+pjImKtpDcCt0h6OPtLq2r3AvtGxEal2Q6+C+xfQ715nQTcEVvPrtDUezXSRqxdgdvW\nNiTNIHVgn4yI58s67iB8hZKsBfZpeb13ti7PPnnKVhkXkg4BLgFOjjSLAAARsTb7dz1pZoJ5dcQU\nEc9HxMZs+QZgmqSZec+nqrhanELbVxIVvVd5NNGucqm5XeXSUNsqota2JWkaqTP5VkRc3WGXettX\n2Ymi7fGHdKW2GtiPVxNUB7XtcyJbJ7d+lLdsxXHtC6wCjm5bPx3YtWX5TmCippjexKv3OM0DHs3e\nt0bfq2y/3yR9Fz696veq5fhjdE8y196ucsZVa7sqEFftbStPXE20rey8LwfO77FPre3LX3kBEbFZ\n0sdJz6efmojyAUkfzbZ/jTSn2HzSf7IXgD/tVbbGuD4L7AFcKAlgc6SJ4GYB12Trdgb+PSJuqimm\n9wEfk7SZ9JjmUyK14qbfK4D3At+LiE0txSt5rwAkXUEamTRT0mPA3wPTWmKqvV3ljKvWdlUgrtrb\nVs64oOa2BbwD+CBwv6Tl2brPkP4YaKR9+U55MzMrhXMoZmZWCncoZmZWCncoZmZWCncoZmZWCnco\nZmZWCncoZg2TtJukv2o6DrNhuUMxa95ugDsU2+65QzFr3iLgLdnzMr7QdDBmg/KNjWYNy2aKXRwR\nb284FLOh+ArFzMxK4Q7FzMxK4Q7FrHkbSI9wNduuuUMxa1ikZ43cIWmFk/K2PXNS3szMSuErFDMz\nK4U7FDMzK4U7FDMzK4U7FDMzK4U7FDMzK4U7FDMzK4U7FDMzK4U7FDMzK8X/A1AkUrwpZq8WAAAA\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe64f910668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe64fe3e550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nw9hwgNUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe65004fcc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fe64f8e5fd0>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "###########################################################################\n",
    "############### Getting a noisy signal and label it #########################\n",
    "###########################################################################\n",
    "\n",
    "# Generate noisy signal:\n",
    "f_prime = np.random.randn(N,1)\n",
    "error = L.dot(f_prime)\n",
    "X_noisy = X + error\n",
    "\n",
    "# Label the original and new signal\n",
    "Y = np.sign(np.diff(X,n=1,axis = 0))\n",
    "Y_noisy = np.sign(np.diff(X_noisy,n=1,axis = 0))\n",
    "\n",
    "gl.set_subplots(4,1)\n",
    "# Plot the original signal and its labelling ! \n",
    "ax1 = gl.scatter(tgrid,X, lw = 1, alpha = 0.9, color = \"k\", nf = 1,\n",
    "                 labels = [\"Original signal\",\"\",\"X(t)\"])\n",
    "gl.plot(tgrid,X, lw = 2, color = \"k\", ls = \"--\")\n",
    "gl.stem(tgrid[1:,0], Y, sharex = ax1, nf = 1, labels = [\"\", \"t\",\"Y(t)\"])\n",
    "\n",
    "# Plot noisy part\n",
    "gl.scatter(tgrid,X_noisy, lw = 1, alpha = 0.9, color = \"k\", nf = 1,\n",
    "                 labels = [\"Noisy signal\",\"\",\"X_noise(t)\"])\n",
    "gl.plot(tgrid,X_noisy, lw = 2, color = \"k\", ls = \"--\")\n",
    "gl.stem(tgrid[1:,0], Y_noisy, sharex = ax1, nf = 1, labels = [\"\", \"t\",\"Y_noise(t)\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Creating file: ./artificial_data/X_values0.pkl\n",
      "Creating file: ./artificial_data/X_values1.pkl\n",
      "Creating file: ./artificial_data/X_values2.pkl\n",
      "Creating file: ./artificial_data/X_values3.pkl\n",
      "Creating file: ./artificial_data/X_values4.pkl\n",
      "Creating file: ./artificial_data/X_values5.pkl\n",
      "Creating file: ./artificial_data/X_values6.pkl\n",
      "Creating file: ./artificial_data/X_values7.pkl\n",
      "Creating file: ./artificial_data/X_values8.pkl\n",
      "Creating file: ./artificial_data/X_values9.pkl\n",
      "Creating file: ./artificial_data/Y_values0.pkl\n",
      "Creating file: ./artificial_data/Y_values1.pkl\n",
      "Creating file: ./artificial_data/Y_values2.pkl\n",
      "Creating file: ./artificial_data/Y_values3.pkl\n",
      "Creating file: ./artificial_data/Y_values4.pkl\n",
      "Creating file: ./artificial_data/Y_values5.pkl\n",
      "Creating file: ./artificial_data/Y_values6.pkl\n",
      "Creating file: ./artificial_data/Y_values7.pkl\n",
      "Creating file: ./artificial_data/Y_values8.pkl\n",
      "Creating file: ./artificial_data/Y_values9.pkl\n"
     ]
    }
   ],
   "source": [
    "###########################################################################\n",
    "############### GENERATE THE DATA TO SAVE TO DISK !! #########################\n",
    "###########################################################################\n",
    "\n",
    "Nchains = 100           # Number of chains to generate !\n",
    "Lenght_chains = 60      # Length of the correlated chains\n",
    "\n",
    "\n",
    "# Compute the kernel and the realizations\n",
    "N = Lenght_chains\n",
    "X_list = []\n",
    "Y_list = []\n",
    "\n",
    "for i in range(Nchains):\n",
    "    # Generate the chain\n",
    "    t0 = 0          # Initial time         \n",
    "    delta_t = 0.02   # Period of sampling\n",
    "    tf = t0 + Lenght_chains*delta_t         # Final time\n",
    "    # Create the t- values\n",
    "    tgrid = np.linspace(t0,tf, Lenght_chains)\n",
    "    tgrid = tgrid.reshape(tgrid.size,1)\n",
    "    N = tgrid.size\n",
    "    \n",
    "    # Create the signal \n",
    "    X = mean_function(tgrid, f1 = 1, f2 = 5, a1 = 0.4, a2 = 0.1, \n",
    "                          phi2 = 2*np.pi/7, m = 0.1 )\n",
    "\n",
    "    # Generate the noise\n",
    "    K = get_Kernel(tgrid, kernel_type = \"1\", l = 0.01, sigma_noise = 1)\n",
    "    L = np.linalg.cholesky(K+1e-10*np.eye(N))\n",
    "    f_prime = np.random.randn(N,1)\n",
    "    error = L.dot(f_prime)\n",
    "    \n",
    "    X_noisy = X + error\n",
    "    # Label the original and new signal\n",
    "    Y = np.sign(np.diff(X,n=1,axis = 0))\n",
    "    Y_noisy = np.sign(np.diff(X_noisy,n=1,axis = 0))\n",
    "\n",
    "    X_list.append(X_noisy)\n",
    "    Y_list.append(Y_noisy)\n",
    "\n",
    "\n",
    "########## Using Pickle ###############\n",
    "\n",
    "Ndivisions = 10;\n",
    "folder_data = \"./artificial_data/\"\n",
    "ul.create_folder_if_needed(folder_data)\n",
    "    \n",
    "\n",
    "# Cannot use it due to incompatibilities Python 2 and 3\n",
    "pkl.store_pickle(folder_data +\"X_values.pkl\",X_list,Ndivisions)\n",
    "pkl.store_pickle(folder_data +\"Y_values.pkl\",Y_list,Ndivisions)\n",
    "\n",
    "## Test to load the files back \n",
    "X_list2 = pkl.load_pickle(folder_data +\"X_values.pkl\",Ndivisions)\n",
    "Y_list2 = pkl.load_pickle(folder_data +\"Y_values.pkl\",Ndivisions)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
